In [1]:
Copied!
# %pip install geoai-py
# %pip install geoai-py
Import package¶
In [2]:
Copied!
import geoai
import geoai
Download sample data¶
In [3]:
Copied!
raster_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_building_masks.tif"
raster_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_building_masks.tif"
In [4]:
Copied!
raster_path = geoai.download_file(raster_url)
raster_path = geoai.download_file(raster_url)
naip_building_masks.tif: 0%| | 0.00/61.6k [00:00<?, ?B/s]
naip_building_masks.tif: 100%|██████████| 61.6k/61.6k [00:00<00:00, 9.42MB/s]
In [5]:
Copied!
geoai.view_image(raster_path, figsize=(18, 10))
geoai.view_image(raster_path, figsize=(18, 10))
Convert raster to vector¶
In [6]:
Copied!
gdf = geoai.raster_to_vector(raster_path, output_path="naip_building_masks.geojson")
gdf = geoai.raster_to_vector(raster_path, output_path="naip_building_masks.geojson")
INFO:pyogrio._io:Created 677 records
Vectorized data saved to naip_building_masks.geojson
In [7]:
Copied!
geoai.view_vector_interactive(
gdf, style_kwds={"color": "blue", "fillOpacity": 0}, tiles="Satellite"
)
geoai.view_vector_interactive(
gdf, style_kwds={"color": "blue", "fillOpacity": 0}, tiles="Satellite"
)
Out[7]:
Make this Notebook Trusted to load map: File -> Trust Notebook
Building regularization¶
In [8]:
Copied!
gdf_regularized = geoai.regularize_building_footprints(
building_polygons=gdf,
angle_tolerance=10,
simplify_tolerance=0.5,
orthogonalize=True,
preserve_topology=True,
)
gdf_regularized = geoai.regularize_building_footprints(
building_polygons=gdf,
angle_tolerance=10,
simplify_tolerance=0.5,
orthogonalize=True,
preserve_topology=True,
)
In [9]:
Copied!
geoai.view_vector_interactive(
gdf_regularized, style_kwds={"color": "red", "fillOpacity": 0}, tiles="Satellite"
)
geoai.view_vector_interactive(
gdf_regularized, style_kwds={"color": "red", "fillOpacity": 0}, tiles="Satellite"
)
Out[9]:
Make this Notebook Trusted to load map: File -> Trust Notebook
Hybrid regularization¶
In [10]:
Copied!
gdf_hybrid = geoai.hybrid_building_regularization(gdf)
gdf_hybrid = geoai.hybrid_building_regularization(gdf)
In [11]:
Copied!
geoai.view_vector_interactive(
gdf_hybrid, style_kwds={"color": "green", "fillOpacity": 0}, tiles="Satellite"
)
geoai.view_vector_interactive(
gdf_hybrid, style_kwds={"color": "green", "fillOpacity": 0}, tiles="Satellite"
)
Out[11]:
Make this Notebook Trusted to load map: File -> Trust Notebook
Adaptive regularization¶
In [12]:
Copied!
gdf_adaptive = geoai.adaptive_building_regularization(
building_polygons=gdf,
simplify_tolerance=0.5,
area_threshold=0.9,
preserve_shape=True,
)
gdf_adaptive = geoai.adaptive_building_regularization(
building_polygons=gdf,
simplify_tolerance=0.5,
area_threshold=0.9,
preserve_shape=True,
)
In [13]:
Copied!
geoai.view_vector_interactive(
gdf_adaptive, style_kwds={"color": "yellow", "fillOpacity": 0}, tiles="Satellite"
)
geoai.view_vector_interactive(
gdf_adaptive, style_kwds={"color": "yellow", "fillOpacity": 0}, tiles="Satellite"
)
Out[13]:
Make this Notebook Trusted to load map: File -> Trust Notebook
Compare regularization methods¶
In [14]:
Copied!
import leafmap.foliumap as leafmap
import leafmap.foliumap as leafmap
In [15]:
Copied!
m = leafmap.Map()
m.add_basemap("SATELLITE")
m.add_gdf(gdf, layer_name="Original")
m.add_gdf(
gdf_regularized, style={"color": "red", "fillOpacity": 0}, layer_name="Regularized"
)
m.add_gdf(gdf_hybrid, style={"color": "green", "fillOpacity": 0}, layer_name="Hybrid")
m.add_gdf(
gdf_adaptive, style={"color": "yellow", "fillOpacity": 0}, layer_name="Adaptive"
)
legend = {
"Original": "blue",
"Regularized": "red",
"Hybrid": "green",
"Adaptive": "yellow",
}
m.add_legend(title="Building Footprints", legend_dict=legend)
m
m = leafmap.Map()
m.add_basemap("SATELLITE")
m.add_gdf(gdf, layer_name="Original")
m.add_gdf(
gdf_regularized, style={"color": "red", "fillOpacity": 0}, layer_name="Regularized"
)
m.add_gdf(gdf_hybrid, style={"color": "green", "fillOpacity": 0}, layer_name="Hybrid")
m.add_gdf(
gdf_adaptive, style={"color": "yellow", "fillOpacity": 0}, layer_name="Adaptive"
)
legend = {
"Original": "blue",
"Regularized": "red",
"Hybrid": "green",
"Adaptive": "yellow",
}
m.add_legend(title="Building Footprints", legend_dict=legend)
m
Out[15]: